package main

import "fmt"

// 方法：可以理解为函数多了一个调用者
// 方法可以重名，不同的对象，调用的结果是不一样的
type Dog struct {
	Name string
	age  int
}

// 方法定义 ：
// func 方法调用者 方法名
// 1.方法可以重名，只需要调用者不同
// 2.如果调用者相同，那么则不能重名
func (dog Dog) eat() {
	fmt.Println("Dog eating...")
}
func (dog Dog) sleep() {
	fmt.Println("Dog sleep...")
}

type Cat struct {
	name string
	age  int
}

func (cat Cat) eat() {
	fmt.Println("Cat eating...")
}
func (cat Cat) sleep() {
	fmt.Println("Cat sleep...")
}
func main() {
	dog := Dog{Name: "旺财", age: 2}
	fmt.Println(dog)
	dog.eat()
	dog.sleep()
	fmt.Println("===============")

	//方法的调用，通过对应的结构体对象的调用
	cat := Cat{name: "喵喵", age: 1}
	cat.eat()
	cat.sleep()
}

//方法：
//● 某个类的行为功能，需要指定调用者
//● 一段独立的代码功能，必须要使用调用者来调用
//● 多个类的方法可以重名，单个类不行
//● 方法是某个类的动作
